#include "visiteur.hpp"

void Visiteur::zebrage(Surface& s)
{
	//parcourt toutes les faces de la surface
	Surface::Iter<Face> itf;
	for(itf=s.beginFace();itf!=s.endFace();itf++)
	{
		double Y1=(*itf).getSommet(0)->getY();
		double Y2=(*itf).getSommet(1)->getY();
		double Y3=(*itf).getSommet(2)->getY();
		int x1=((int)((Y1+1)/0.02))%2;
		int x2=((int)((Y2+1)/0.02))%2;
		int x3=((int)((Y3+1)/0.02))%2;
		if(x1+x2+x3 >= 2)
		{
			(*itf).setCouleur(0,0,255);
		}
		else
		{
			(*itf).setCouleur(255,0,0);
		}
	}
}

void Visiteur::quadrillage(Surface& s)
{
	//parcourt toutes les faces de la surface
	Surface::Iter<Face> itf;
	for(itf=s.beginFace();itf!=s.endFace();itf++)
	{
		int x,y,z;
		double Y1=(*itf).getSommet(0)->getY();
		double Y2=(*itf).getSommet(1)->getY();
		double Y3=(*itf).getSommet(2)->getY();
		double X1=(*itf).getSommet(0)->getX();
		double X2=(*itf).getSommet(1)->getX();
		double X3=(*itf).getSommet(2)->getX();
		double Z1=(*itf).getSommet(0)->getZ();
		double Z2=(*itf).getSommet(1)->getZ();
		double Z3=(*itf).getSommet(2)->getZ();
		
		int y1=((int)((Y1+1)/0.02))%2;
		int y2=((int)((Y2+1)/0.02))%2;
		int y3=((int)((Y3+1)/0.02))%2;
		if(y1+y2+y3 >= 2)
		{
			y=1;
		}
		else
		{
			y=0;
		}
		
		int x1=((int)((X1+1)/0.02))%2;
		int x2=((int)((X2+1)/0.02))%2;
		int x3=((int)((X3+1)/0.02))%2;
		if(x1+x2+x3 >= 2)
		{
			x=1;
		}
		else
		{
			x=0;
		}
		
		int z1=((int)((Z1+1)/0.02))%2;
		int z2=((int)((Z2+1)/0.02))%2;
		int z3=((int)((Z3+1)/0.02))%2;
		if(z1+z2+z3 >= 2)
		{
			z=1;
		}
		else
		{
			z=0;
		}
		
		if((x+y+z)%2 == 0)
		{
			(*itf).setCouleur(0,0,255);
		}
		else
		{
			(*itf).setCouleur(255,0,0);
		}
	}
}

void Visiteur::tache(Surface& s)
{
	Surface::Iter<Sommet> its;
	for(its=s.beginSommet();its!=s.endSommet();its++)
	{
		int r = rand() % 50;
		if(r == 0)
		{
			creationTache(*its);
		}
	}
}

void Visiteur::creationTache(Sommet& s)
{
	Sommet::IterSommetAdj itsa;
	for(itsa=s.beginSommetAdj();itsa!=s.endSommetAdj();itsa++)
	{
		Sommet::IterFaceAdj itfa;
		for(itfa=(*itsa).beginFaceAdj();itfa!=(*itsa).endFaceAdj();itfa++)
		{
			(*itfa).setCouleur(0,255,0);
		}
	}
}
